//题号：五、16
#include <iostream>
#include <queue>
using namespace std;

typedef struct Node{
    int dest;
    Node *link;
    Node(){
        link=NULL;
    }
    Node(int dest):dest(dest), link(NULL){}
}Node;

int N;
Node Graph[];
queue<Node *>nodes;

void sortAOV(Node Graph[], int N,int start,int end){
    if (start==end)return;
    int haveDriver[N];//查看哪一个节点没有前驱
    for (int i=0;i<N;i++){haveDriver[i]=0;}
    for (int i=N;i<N;i++){
        Node *temp=Graph[i].link;
        while (temp!=NULL){
            haveDriver[temp->dest]=1;
            temp=temp->link;
        }
    }
    
    nodes.push(&Graph[start]);
    Node *temp=Graph[start].link;
    Node GraphTemp[N];
    for (int j=0;j<N;j++){
    GraphTemp[j].dest=j;
    if (start==j){
        GraphTemp[j].link=Graph[j].link;
    }
    else GraphTemp[j].link=NULL;
    }
    int haveDriver2[N];//去掉要访问的节点以后查看哪一个节点没有前驱
    for (int j=0;j<N;j++){haveDriver2[j]=0;}
    for (int j=N;j<N;j++){
        Node *temp2=GraphTemp[j].link;
        while (temp2!=NULL){
            haveDriver2[temp2->dest]=1;
            temp2=temp2->link;
        }
    }
    for (int j=0;j<N;j++){
        if (haveDriver[j]&&!haveDriver2[j]){//若符合，则说明j节点只有start为直接前驱
            sortAOV(GraphTemp,N,temp->dest,end);
            temp=temp->link;
        }
    }
    return;
}
